package cn.fl.project.service;

import java.util.List;

import cmm.mid.core.framework.page.KeyValueVO;
import cmm.mid.core.framework.page.Pager;
import cn.cmm.base.framework.exception.BaseException;
import cn.fl.product.vo.MfrInfoVO;
import cn.fl.product.vo.SplBankVO;
import cn.fl.project.condition.PrjPrdBscInfoQueryCondition;
import cn.fl.project.vo.*;
import cn.fl.system.vo.SysCdMapDVO;
import fl.spl.facade.spl.condition.SplBankQueryCondition;
import fl.spl.facade.spl.condition.SplInfoQueryCondition;

/**
 * @Description: 项目产品基础信息表 客户端服务层接口
 * @Description: 持久层方法名称前缀：新增：insert* 删除：delete* 修改：update* 批量：batch* 查询对象：select* get* find* 查询集合：select*
 * @Description: 业务层方法名称前缀：新增：add* 删除：remove* 修改：modify* 查询对象：select* get* 批量：batch* 查询集合：search*
 */
public interface IPrjPrdBscInfoService {
	
	/**
	 * 获取唯一对象
	 * @param id 主键
	 * @return 对象DTO
	 */
	public PrjPrdBscInfoVO selectById(Long id)throws BaseException;
	
	/**
	 * 新增
	 * @param entity
	 * @return
	 */
    public Long add(PrjPrdBscInfoVO entity) throws BaseException;

    /**
     * 删除
     * @param id
     * @return
     */
    public boolean removeById(Long id)throws BaseException;
    
    /**
     * 删除
     * @param ids
     * @return
     */
    public boolean removeByIds(List<Long> ids)throws BaseException;

    /**
     * 修改
     * @param entity
     * @return
     */
    public boolean modify(PrjPrdBscInfoVO entity)throws BaseException;

    /**
     * 分页查询所有
     * @param page
     * @return
     */
    public Pager searchListPage(Pager page)throws BaseException;
    /**
     * 获取商品基础及明细数据
     * @param id
     * @return
     * @throws BaseException
     */
	public PrjPrdBscInfoVO selectPrjPrdBscAndDetailInfoById(String id) throws BaseException;
	/**
	 * 通过id查询项目产品信息
	 * @param id
	 * @return
	 * @throws BaseException
	 */
	
	public PrjPrdBscInfoVO getPrjPrdBscInfoById(Long id) throws BaseException;
	/**
	 * 项目产品信息
	 * @param qc
	 * @return
	 * @throws BaseException
	 */
	public List<PrjPrdBscInfoVO> searchList(PrjPrdBscInfoQueryCondition qc)throws BaseException;
	/**
	 * 查询目标代码值
	 * @param prdCd
	 * @return
	 * @throws BaseException
	 */
	public SysCdMapDVO searchBizCodeByPrdCd(String prdCd)throws BaseException;
	/**
	 * 保存产品主表与明细数据
	 * @param prdBscInfoVO
	 * @param prdCarInfoVO
	 * @param prdTkInfoVO
	 * @return
	 */
	@Deprecated
	public Long addPrjPrdBscAndDetailInfo(PrjPrdBscInfoVO prdBscInfoVO, PrjPrdCarInfoVO prdCarInfoVO,
			PrjPrdTkInfoVO prdTkInfoVO)throws BaseException;
    /**
     * 保存产品明细ID对应的产品信息
     * @param dtlId
     * @return
     * @throws BaseException
     */
	public  boolean addPrjPrdDtlPrdInfoByDtlId(Long dtlId)throws BaseException;
	/**
	 * 字典选项 驱动形式
	 * @return
	 * @throws BaseException
	 */
	public List<KeyValueVO> getDrvTypList()throws BaseException;
	/**
	 * 字典选项 马力
	 * @return
	 * @throws BaseException
	 */
	public List<KeyValueVO> getHpList()throws BaseException;
	/**
	 * 字典选项 变速箱型号 
	 * @return
	 * @throws BaseException
	 */
	public List<KeyValueVO> getGrboxMdlList()throws BaseException;
	/**
	 * 字典选项 轮胎规格 
	 * @return
	 * @throws BaseException
	 */
	public List<KeyValueVO> getMWhlSpecList()throws BaseException;
	/**
	 * 字典选项 板材材质 
	 * @return
	 * @throws BaseException
	 */
	public List<KeyValueVO> getMatQalCdList()throws BaseException;
	/**
	 * 字典选项 举升方式 
	 * @return
	 * @throws BaseException
	 */
	public List<KeyValueVO> getLiftWayCdList()throws BaseException;
	/**
	 * 字典选项 轮胎规格*数量 
	 * @return
	 * @throws BaseException
	 */
	public List<KeyValueVO> getTrlWhlSpecList()throws BaseException;
	/**
	 * 删除项目产品和支付表信息
	 * @param idList
	 * @param prjId
	 * @throws BaseException
	 */
	public void removePrjPrdAndPrjPrdPayList(List<Long> idList, Long prjId)throws BaseException;
	/**
	 * 修改产品及产品明细信息
	 * @param prdBscInfoVO
	 * @param prdCarInfoVO
	 * @param prdTkInfoVO
	 * @throws BaseException
	 */
	@Deprecated
	public void modifyPrjPrdBscAndDetailInfo(PrjPrdBscInfoVO prdBscInfoVO, PrjPrdCarInfoVO prdCarInfoVO,
			PrjPrdTkInfoVO prdTkInfoVO)throws BaseException;
	/**
	 * 获取供应商账号信息 
	 * @param qc
	 * @return
	 */
	public List<SplBankVO> getSplBankAccNoBySplId(SplBankQueryCondition qc)throws BaseException;
	/**
	 * 查询融资产品相关信息
	 * @param page
	 * @return
	 * @throws BaseException
	 */
	public Pager searchPrjPrdListPage(Pager page)throws BaseException;
	/**
	 * 查询供应商分页列表
	 * @param page
	 * @return
	 * @throws BaseException
	 */
	
	public Pager searchSplListPage(Pager page)throws BaseException;
	/**
	 *
	 * @param splId
	 * @return
	 * @throws BaseException
	 */
	public List<MfrInfoVO> getSplMfrListBySplId(SplInfoQueryCondition condition)throws BaseException;
	/**
	 * 查询政策code
	 * @param prdCd
	 * @return
	 * @throws BaseException
	 */
	public SysCdMapDVO searchPlcyMapByPrdCd(String prdCd)throws BaseException;

	public Long selectByPrjId(Long prjId);

	/**
	 * 保存产品主表与明细数据
	 * @param prdBscInfoVO
	 * @param extDTO
	 * @return
	 */
	Long addPrjPrdBscAndDetailInfo(PrjPrdBscInfoVO prdBscInfoVO, PrjPrdExtVO extDTO) throws BaseException;

	/**
	 * 修改产品及产品明细信息
	 * @param prdBscInfoVO
	 * @param extDTO
	 */
	void modifyPrjPrdBscAndDetailInfo(PrjPrdBscInfoVO prdBscInfoVO, PrjPrdExtVO extDTO) throws BaseException;

	/**
	 * 同步保存车源信息
	 * @param prdBscInfoVO
	 * @param extDTO
	 */
	void modifyPrjPrdCarSourceDetailInfo(PrjPrdBscInfoVO prdBscInfoVO, PrjPrdExtVO extDTO) throws BaseException;

	/**
	 * 批量处理--验车方式和出厂日期
	 */
	int modifyVehCheckCode();

	/**
	 * 获取唯一对象
	 * @param id 主键
	 * @return 对象DTO
	 */
	public PrjPrdSourceInfoVO selectPrjPrdSourceInfoById(Long id)throws BaseException;

	void getLoanableAmt(String prjId, String vehNo, Long prjPrdDtlId);

	/**
	 * 判断车源编号是否存在
	 * @param condition
	 * @return
	 * @throws BaseException
	 */
	public boolean checkPrjPrdCarNoExist(PrjPrdBscInfoQueryCondition condition) throws BaseException;

	/**
	 * 换车-保存项目产品信息
	 * @param prjPrdBscInfo
	 * @param extVO
	 * @param oldDtlId
	 * @return
	 * @throws BaseException
	 */
	Long addPrdDetailInfoByHC(PrjPrdBscInfoVO prjPrdBscInfo, PrjPrdExtVO extVO, Long oldDtlId, Long paySchId, String paySchNo) throws BaseException;

	/**
	 * 换车-修改项目产品信息
	 * @param prjPrdBscInfo
	 * @param extVO
	 * @return
	 * @throws BaseException
	 */
	void modifyPrdDetailInfoByHC(PrjPrdBscInfoVO prjPrdBscInfo, PrjPrdExtVO extVO, Long oldDtlId) throws BaseException;

	/**
	 * 换车-删除项目产品信息
	 * @param id
	 * @return
	 */
	boolean removePrjPrdByHC(Long id, Long paySchId, Long prjId)throws BaseException;

	/**
	 * 删除担保主体信息
	 * @param prjId
	 * @return
	 */
    void removeGuaranteePaymentInfo(Long prjId) throws BaseException;
}
